package com.cyf.common.core.time;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;

/**
 * @author chenyifan
 * @create 2025-03-01 21:05
 */
public class DateStrUtil {

    private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");


    /**
     * 增加年份
     * @param time 时间
     * @param years 增加的年份
     * @return yyyy-MM-dd HH:mm:ss
     */
    public static String plusYears(String time, long years) {
        LocalDateTime dateTime = LocalDateTime.parse(time, DATE_TIME_FORMATTER);
        return DATE_TIME_FORMATTER.format(dateTime.plusYears(years));
    }

    /**
     * 减少年份
     * @param time 时间
     * @param years 减少的年份
     * @return yyyy-MM-dd HH:mm:ss
     */
    public static String minusYears(String time, long years) {
        return plusYears(time, -years);
    }

    /**
     * 增加季度
     * @param time 时间
     * @param quarters 增加的季度
     * @return yyyy-MM-dd HH:mm:ss
     */
    public static String plusSeasons(String time, long quarters) {
        LocalDateTime dateTime = LocalDateTime.parse(time, DATE_TIME_FORMATTER);
        return DATE_TIME_FORMATTER.format(dateTime.plusMonths(quarters * 3));
    }

    /**
     * 减少季度
     * @param time 时间
     * @param quarters 减少的季度
     * @return yyyy-MM-dd HH:mm:ss
     */
    public static String minusSeasons(String time, long quarters) {
        return plusSeasons(time, -quarters);
    }

    /**
     * 增加月份
     * @param time 时间
     * @param months 增加的月份
     * @return yyyy-MM-dd HH:mm:ss
     */
    public static String plusMonths(String time, long months) {
        LocalDateTime dateTime = LocalDateTime.parse(time, DATE_TIME_FORMATTER);
        return DATE_TIME_FORMATTER.format(dateTime.plusMonths(months));
    }

    /**
     * 减少月份
     * @param time 时间
     * @param months 减少的月份
     * @return yyyy-MM-dd HH:mm:ss
     */
    public static String minusMonths(String time, long months) {
        return plusMonths(time, -months);
    }

    /**
     * 增加天数
     * @param time 时间
     * @param days 增加的天数
     * @return yyyy-MM-dd HH:mm:ss
     */
    public static String plusDays(String time, long days) {
        LocalDateTime dateTime = LocalDateTime.parse(time, DATE_TIME_FORMATTER);
        return DATE_TIME_FORMATTER.format(dateTime.plusDays(days));
    }

    /**
     * 减少天数
     * @param time 时间
     * @param days 减少的天数
     * @return yyyy-MM-dd HH:mm:ss
     */
    public static String minusDays(String time, long days) {
        return plusDays(time, -days);
    }

    /**
     * 增加小时
     * @param time 时间
     * @param hours 增加的小时
     * @return yyyy-MM-dd HH:mm:ss
     */
    public static String plusHours(String time, long hours) {
        LocalDateTime dateTime = LocalDateTime.parse(time, DATE_TIME_FORMATTER);
        return DATE_TIME_FORMATTER.format(dateTime.plusHours(hours));
    }

    /**
     * 减少小时
     * @param time 时间
     * @param hours 减少的小时
     * @return yyyy-MM-dd HH:mm:ss
     */
    public static String minusHours(String time, long hours) {
        return plusHours(time, -hours);
    }

    /**
     * 增加分钟
     * @param time 时间
     * @param minutes 增加的分钟
     * @return yyyy-MM-dd HH:mm:ss
     */
    public static String plusMinutes(String time, long minutes) {
        LocalDateTime dateTime = LocalDateTime.parse(time, DATE_TIME_FORMATTER);
        return DATE_TIME_FORMATTER.format(dateTime.plusMinutes(minutes));
    }

    /**
     * 减少分钟
     * @param time 时间
     * @param minutes 减少的分钟
     * @return yyyy-MM-dd HH:mm:ss
     */
    public static String minusMinutes(String time, long minutes) {
        return plusMinutes(time, -minutes);
    }
}
